package synchronizedTest;

/**
 * 
 * 
 * @author lcx
 *
 */
public class SynchronizedTest {

	public synchronized void synchronizedMethod0()
	{
		System.out.println("synchronizedMethod0  start...");
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("synchronizedMethod0  end...");
	}
	
	public synchronized void synchronizedMethod1()
	{
		System.out.println("synchronizedMethod1  start...");
		try {
			Thread.sleep(1);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("synchronizedMethod1  end...");
	}

	
//	public void synchronizedMethod1()
//	{
//		synchronized(this)
//		{
//			System.out.println("synchronizedMethod  start...");
//			try {
//				Thread.sleep(1);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//			System.out.println("synchronizedMethod  end...");
//		}
//	}
//
//	public  void synchronizedMethod2()
//	{
//		synchronized(SynchronizedTest.class)
//		{
//			System.out.println("synchronizedClassMethod  start...");
//			try {
//				Thread.sleep(1);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
//			System.out.println("synchronizedClassMethod  end...");
//		}
//	}
	
	public void plainMethod()
	{
		System.out.println("plainMethod...");
	}

	public static void main(String[] args) {
		final SynchronizedTest test=new SynchronizedTest();
		Thread td1=new Thread()
		{
			int i=1;
			@Override
			public void run()
			{
				while(i++<10)
					test.synchronizedMethod0();
			}
		};

		Thread td2=new Thread()
		{
			@Override
			public void run()
			{
				int i=1;
				while(i++<10)
					test.synchronizedMethod1();
			}
		};

		td1.start();
		td2.start();
	}
}
